import matplotlib.pyplot as plt # 导入绘图库
figure, axis = plt.subplots(figsize=(7.0, 3.8)) # 创建适配幻灯片的横向画布
scatter_handle = axis.scatter(window_features['annualized_volatility'], window_features['annualized_return'], c=cluster_labels, cmap='viridis', s=70, alpha=0.8) # 窗口散点按簇着色
centers_original = pd.DataFrame(feature_scaler.inverse_transform(kmeans_model.cluster_centers_), columns=window_features.columns) # 按训练时列顺序把质心反变换回原始尺度
center_volatility = centers_original['annualized_volatility'] # 取原尺度波动率作为横坐标
center_return = centers_original['annualized_return'] # 取原尺度收益率作为纵坐标
axis.scatter(center_volatility, center_return, c='#EC232A', marker='X', s=220, edgecolors='black', linewidths=1.5, label='centroid') # 红色X标记质心
latest_x = window_features.loc[cluster_labels.index[-1], 'annualized_volatility'] # 最新窗口横坐标
latest_y = window_features.loc[cluster_labels.index[-1], 'annualized_return'] # 最新窗口纵坐标
axis.annotate(format_half_year(cluster_labels.index[-1]), xy=(latest_x, latest_y), xytext=(8, -12), textcoords='offset points', fontsize=16) # 标注最新窗口
axis.set_xlabel('Annualized volatility') # 横轴为年化波动率
axis.set_ylabel('Annualized return') # 纵轴为年化平均收益
axis.grid(True, alpha=0.3) # 显示浅网格
figure.colorbar(scatter_handle, ax=axis, label='Cluster') # 添加簇编号颜色条
figure.tight_layout() # 自动收紧边距
plt.show() # 显示图形